
//HTTP
// const request=import('../../net/http/fetch.js');
import { GHHttp as fetch } from '../../net/index';


Component({
  /**
   * 组件的属性列表
   */
  properties: {
    //数据源请求对象
    requestObject: {
      type: Object, // 类型（必填），目前接受的类型包括：String, Number, Boolean, Object, Array, null（表示任意类型）
      value: {
        key: 'productList',
        data: {
          // MessageTypeId_query: 1
        }
      }
    },
    //分页属性  
    pageSize: { // 属性名
      type: Number, // 类型（必填），目前接受的类型包括：String, Number, Boolean, Object, Array, null（表示任意类型）
      value: 10
    },
    //数据源参数配置 
    dataSetting: { // 属性名
      type: Object, // 类型（必填），目前接受的类型包括：String, Number, Boolean, Object, Array, null（表示任意类型）
      value: {
        rows: "rows",
        total: "totalCount"
      }
    }
  }, 

  /*
   * 组件的初始数据   this.requestObject.data
   */
  data: {
    //临时数据存储   
    list: [],
    //当前页码
    pageIndex: 1,
    //最大页码(根据后台返回动态计算) 
    maxPageIndex: 0
  },

  /*
   *组件生命周期
   */
  lifetimes: {
    // 生命周期函数，可以为函数，或一个在methods段中定义的方法名
    ready() {
      //第一次加载数据
      this.loadList("PullDown");
    },
    attached() {},
    moved() {},
    detached() {},
  },

  /*
   *  组件所在页面的生命周期函数
   */
  pageLifetimes: {
    show() {},
    hide() {},
    resize() {},
  },


  /*
   * 组件的方法列表
   */
  methods: {
    //列表刷新公共方法
    loadList(type) { // type(下拉（PullDown） 还是 触底（ReachBottom）)
      if (this.isLoad(type)) {
        //数据加载前
        this._beforeLoad(type);
        //设置页面Index业务逻辑
        this._setPageInfo(type);
        //获取数据源
        this.GetListData(type);
      }
    },
    //判断是否符合继续加载数据条件
    isLoad(type) {
      return type === "ReachBottom" ? (this.data.maxPageIndex == 0 || this.data.pageIndex < this.data.maxPageIndex) : true;
    },
    //事件触发
    EventTriggering(data) {
      //触发自定义事件 通知父级页面按数据源渲染列表
      this.triggerEvent('loadList', {
        list: this.data.list
      }, {});
    },

    //加载前执行
    _beforeLoad(type) {
      type == "PullDown" &&
        //下拉图标
        wx.setBackgroundTextStyle({
          textStyle: 'dark' // 下拉背景字体、loading 图的样式为dark
        });
    },
    //加载完成执行
    _afterLoad(type) {
      type == "PullDown" && wx.stopPullDownRefresh();
    },
    //获取数据源
    GetListData(type) {
      let $self = this;
      //显示loading图标
      wx.showLoading({
        title: '数据加载中...',
      });
      //异步获取数据源
      this._request().then((val) => {
        //记录缓存数据
        $self._saveLocalData(val, type);
        //取消等待效果
        wx.hideLoading();
        //触发组件事件通知父级页面更新视图
        $self.EventTriggering();
        //数据加载完成
        $self._afterLoad(type);
      });
    },
    //记录缓存数据
    _saveLocalData(val, type) {
      //本地数据
      this.setData({
        list: this._getNewList(val, type),
        maxPageIndex: Math.ceil(parseInt(val.data[this.data.dataSetting.total]) / this.data.pageSize)
      });
    },
    //获取数据源集合
    _getNewList(val, type) {
      return type == "PullDown" ?
        val.data[this.data.dataSetting.rows] :
        this.data.list.concat(val.data[this.data.dataSetting.rows]);
    },

    //设置pageListInfo页面参数  pageObject.pageSize   pageIndex
    _setPageInfo(type) {
      //根据业务类型处理 page参数
      switch (type) {
        //下拉
        case "PullDown":
          this.setData({
            "pageIndex": 1
          });
          break;
          //触底
        case "ReachBottom":
          this.setData({
            "pageIndex": ++this.data.pageIndex
          });
          break;
        default:
          break;
      }
      // type === "PullDown" ? this.setData({
      //   "pageIndex": 1
      // }) : this.setData({
      //   "pageIndex": ++this.data.pageIndex
      // });
    },
    //requset请求
    _request() {
      //请求传参
      const para = {
        ...this.data.requestObject,
        data:  {
          jsonStr:JSON.stringify({
            ...this.data.requestObject.data,
            pageSize: this.data.pageSize,
            pageIndex: this.data.pageIndex
          })
        }
        // data: Object.assign({}, this.data.requestObject.data, {
        //   pageSize: this.data.pageSize,
        //   pageIndex: this.data.pageIndex
        // })
      };
      console.log(para);
      //获取request promise实例
      return fetch(para);
    }

    /*---------------------------------------http临时解决 方案-----------------------------------------------*/
    //requset请求
    // _request() {
    //   //请求传参
    //   return this.getmessagelist_Promise({
    //     pageSize: this.data.pageSize,
    //     pageIndex: this.data.pageIndex
    //   });
    // },

    // //获取产品列表数据源
    // getmessagelist_Promise(paramer) {
    //   //获取异步Promise对象
    //   return this.GetRequestSyncPromise({
    //     url: "/messagemanage/list",
    //     method: "get",
    //     data: {
    //       // jsonStr: JSON.stringify(Object.assign({}, {
    //       //   MessageTypeId_query: 1
    //       // }, paramer))
    //       jsonStr: JSON.stringify(Object.assign({}, this.data.requestObject.data, paramer))
    //     }
    //   });
    // },

    // //创建http request异步Promise实例
    // GetRequestSyncPromise(requestObject) { //参数：request参数（url，data等，暂不包含成功及失败回调实现）
    //   // let $self = this;
    //   //创建promise实例
    //   return new Promise((resolve, reject) => {
    //     //显示loading图标
    //     wx.showLoading({
    //       title: '加载中',
    //     })
    //     //执行ajax请求
    //     wx.request({
    //       url: "http://www.haowangjiaoonline.com/OnlineWebApi" + requestObject.url,
    //       method: requestObject.method || "GET",
    //       data: requestObject.data,
    //       //网络请求成功
    //       success(res) {
    //         //隐藏 loading图标
    //         wx.hideLoading();
    //         resolve(res);
    //       },
    //       //网络请求失败
    //       fail(error) {
    //         //隐藏 loading图标
    //         wx.hideLoading();
    //         reject(error);
    //       }
    //     });
    //   });
    // }
  }
})